package com.taotao.manage.service;

import java.io.IOException;
import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.apache.http.ParseException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import com.github.abel533.entity.Example;
import com.github.abel533.mapper.Mapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.taotao.common.service.ApiService;
import com.taotao.manage.mapper.ItemMapper;
import com.taotao.manage.pojo.Item;
import com.taotao.manage.pojo.ItemDesc;
import com.taotao.manage.pojo.ItemParamItem;

@Service
public class ItemService extends BaseService<Item> {
	
	/*	//注入Mapper;
	@Autowired
	private ItemMapper itemMapper;
	@Override
	public Mapper<Item> getMapper() {
		// TODO Auto-generated method stub
		return this.itemMapper;
	}*/
	
	//注意事务的传播性
	@Autowired
	private ItemDescService itemDescService;
	@Autowired
	private ItemParamItemService itemParamItemService;
	@Autowired
	private ApiService apiService;
	
	@Value("${TAOTAO_WEB_URL}")
	private String TAOTAO_WEB_URL;
	
	/**
	 * 新增商品
	 * @param item
	 * @param desc
	 * @param itemParams
	 */
	public void saveItem(Item item, String desc,String itemParams) {
		
		item.setStatus(1); //初始化商品状态。
		item.setId(null);  //强制id为null,考虑到安全性
		//新增商品
		super.save(item);
		System.out.println("item的ID"+item.getId());
		//新增商品描述
		ItemDesc itemDesc = new ItemDesc();
		itemDesc.setItemDesc(desc);
		itemDesc.setItemId(item.getId());
		itemDescService.save(itemDesc);
		//判断如果itemParam不为空的话
		if (StringUtils.isNotEmpty(itemParams)) {
			ItemParamItem itemParamItem = new ItemParamItem();
			itemParamItem.setItemId(item.getId());
			itemParamItem.setParamData(itemParams);
			itemParamItemService.save(itemParamItem);
		}
	}


	/**根据条件分页查询所有,根据创建时间倒叙
	 * 
	 * @param page 页码
	 * @param rows 每页显示数量
	 * @return
	 */
	public PageInfo<Item> queryPageListByCreatedTimeDESC(Integer page,Integer rows) {
		PageHelper.startPage(page, rows,true);//设置分页参数
		//创建example对象
		Example example = new Example(Item.class);
		//根据时间进行倒叙查询数据
		example.setOrderByClause("created DESC");
		//不查询状态为3（已删除）的数据
		example.createCriteria().andNotEqualTo("status", 3);
		return super.queryPageListByExample(example, page, rows);
	}
	
	/**分页查询所有,根据创建时间倒叙
	 * 
	 * @param page 页码
	 * @param rows 每页显示数量
	 * @return
	 */
	public PageInfo<Item> queryPageListByUpdatedTimeDESC(Integer page,Integer rows) {
		//创建example对象
		Example example = new Example(Item.class);
		//根据时间进行倒叙查询数据
		example.setOrderByClause("updated DESC");
		//不查询状态为3（已删除）的数据
		example.createCriteria().andNotEqualTo("status", 3);
		return super.queryPageListByExample(example, page, rows);
	}
	
	
	/**
	 * 根据商品ID实现商品逻辑删除
	 * @param ids
	 * @return
	 */
	public Integer UpdateItemByIds(List<Object> ids) {
		Item item = new Item();
		item.setStatus(3);//更改状态为3
		return super.updateByIds(ids, "id", item);
	}

	/**
	 * 根据商品的ids实现商品下架功能
	 * @param ids
	 */
	public Integer instockItemByIds(List<Object> ids) {
		// TODO Auto-generated method stub
		Item item = new Item();
		item.setStatus(2);//更改状态为2 即为下架商品
		return super.updateByIds(ids, "id", item);
	}
	
	/**
	 * 根据商品的ids实现商品上架功能
	 * @param ids
	 */
	public Integer reshelfItemByIds(List<Object> ids) {
		// TODO Auto-generated method stub
		Item item = new Item();
		item.setStatus(1);//更改状态为2 即为下架商品
		return super.updateByIds(ids, "id", item);
	}
	
	/**
	 * 修改商品
	 * @param item
	 * @param desc
	 */
	public void updateItem(Item item, String desc,Long itemParamId,String itemParams) {
		//强制部分内容不做更新
		item.setCreated(null);  //创建时间不更新
		item.setStatus(null);	//商品状态不更新
		super.updateSelective(item);
		System.out.println("item的ID"+item.getId());
		//更新商品描述
		ItemDesc itemDesc = new ItemDesc();
		itemDesc.setItemDesc(desc);
		itemDesc.setItemId(item.getId());
		itemDescService.updateSelective(itemDesc);
		if (itemParamId!=null&&itemParamId!=0&&StringUtils.isNoneEmpty(itemParams)) {
			ItemParamItem itemParamItem = new ItemParamItem();
			itemParamItem.setId(itemParamId);
			itemParamItem.setParamData(itemParams);
			itemParamItemService.updateSelective(itemParamItem);
					
		}
		/*************************************************************************/
		try {//通知其他系统，该数据已更新，需要删除缓存
			String URL = TAOTAO_WEB_URL+"/item/cache/"+item.getId()+".html";
			this.apiService.doPost(URL);
		} catch (Exception e) {
			e.printStackTrace();
			//进行相关内容的通知，如邮箱，短信等。
		}
		
	}

}
